/*
 * Document:    formValidation.js
 * Description: Esse documento serve para validar campos de formulários
 */
jQuery.fn.exists = function(){
    return this.length > 0;
}

function onlyNumbers(evt) {
    var theEvent = evt || window.event;
    var key = theEvent.keyCode || theEvent.which;
    key = String.fromCharCode( key );
    var regex = /[0-9]|\./;
    if( !regex.test(key) ) {
        theEvent.returnValue = false;
        if(theEvent.preventDefault) theEvent.preventDefault();
    }
}

$(document).ready(function(){
    $("input.date").mask("99/99/9999",{
        placeholder:"   "
    });
    $("input.cpf").mask("999.999.999-99",{
        placeholder:"   "
    });
    $("input.rg").mask("99.999.999-9",{
        placeholder:"   "
    });
    $("input.phone").mask("(99) 9999-9999",{
        placeholder:"   "
    });

    //Insere os (*) de campos requeridos
    var req = $(".required");
    if ($(req).length > 0 ){
        $(req).each(function(){
            $(this).parent("#main form p").append("<span class=\"required\"> * </span>")
        });
        $("#main form").append("<p class=\"minorText\">Os campos marcados com <span class=\"required\"> * </span> são de preenchimento obrigatório</p>");
    }

});

function formValidation(form){
    var validado = true;

    function showHint(message){
        var errors = $('.error');
        if(errors[0] != null){
            validado = false;
            $('.error').each(function(){
                $(this).parent("form p").append(
                '<span class="hint--always hint--error hint--right hint--rounded" data-hint="'
                    + message
                    +'"></span>'
            );
            });
        }
    }

    $("span.hint--error").remove();
    $('.error').removeClass("error");

    //Verifica os campos Vazios
    if(validado){
        $("input.required").filter(function() {
            return this.value == "";
        }).addClass("error");
        $("select.required option:selected").each(function(){
            if (this.value == "0"){
                $(this).parent("form select").addClass("error");
            }
        })
        showHint("Preenchimento Obrigatório");
    }
    // Verifica os campos de Data
    if(validado){
        $("input.date").each(function(){
            var date = $(this).val();
            date = date.split("/");
            var dia = date[0];
            var mes = date[1];
            var ano = date[2];
            // verifica o dia valido para cada mes
            if ((dia < 1)||(dia < 1 || dia > 30) && (  mes == 4 || mes == 6 || mes == 9 || mes == 11 ) || dia > 31) {
                $(this).addClass("error");
            }
            // verifica se o mes e valido
            if (mes < 1 || mes > 12 ) {
                $(this).addClass("error");
            }
            // verifica se e ano bissexto
            if (mes == 2 && ( dia < 1 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) {
                $(this).addClass("error");
            }
            });
            showHint("Preencha uma data válida");
        }
        //Verifica os campos de email
        if(validado){
            $("input[type='email']").each(function(){
                var email = $(this).val();
                var mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
                if(!email.match(mailformat)){
                    $(this).addClass("error");
                }
            });
            showHint("Preencha um e-mail");
        }

        //Verifica campos para confirmacao
        if(validado){
            $("input.confirmation").each(function(){
                var name = $(this).attr("name");
                var other = $("input[name='"+name+"Confirmation']");
                if( $(this).val() != $(other).val()){
                    $(this).addClass("error");
                    $(other).addClass("error");
                    showHint("Esses campos precisam ser iguais");
                }
            });
        }



        return validado;
    }

